home *** CD-ROM | disk | FTP | other *** search
-
- #include "linkage.h"
- LOFF_D0 = 0x00
- LOFF_D1 = 0x04
- LOFF_D2 = 0x08
- LOFF_D3 = 0x0C
- LOFF_D4 = 0x10
- LOFF_D5 = 0x14
- LOFF_D6 = 0x18
- LOFF_D7 = 0x1C
- LOFF_A0 = 0x20
- LOFF_A1 = 0x24
- LOFF_A2 = 0x28
- LOFF_A3 = 0x2C
- LOFF_A4 = 0x30
- LOFF_A5 = 0x34
- LOFF_A6 = 0x38
- LOFF_USP = 0x3C
- LOFF_PAD = 0x40
- LOFF_STKADJ = 0x42
- LOFF_SR = 0x44
- LOFF_PC = 0x46
- LOFF_FORMAT = 0x4A
- LOFF_STACK = 0x4C
-
-
-
- .text
- .globl SYMBOL_NAME(fpu_emu_trap),SYMBOL_NAME(copyin),SYMBOL_NAME(copyout)
-
-
- ENTRY(fpu_emu_trap)
- clrl %sp@-
- clrl %sp@-
- moveml %d0-%a6,%sp@-
- movel %usp,%a0
- btst #5,%sp@(LOFF_SR)
- beqs inuser
- leal %sp@(LOFF_STACK),%a0
- inuser:
- movel %a0,%sp@(LOFF_USP)
- movel %sp,%sp@-
- jbsr SYMBOL_NAME(do_fpu_emulate)
- addql #4,%sp
- movel %sp@(LOFF_USP),%a0
-
- movel %a0,%usp
- exitint:
- moveml %sp@+,%d0-%a6
- addql #8,%sp
- rte
-
- ENTRY(fusword)
- movem.l %a0-%a1,%sp@-
- movel 12(%sp),%a0
- movel SYMBOL_NAME(globlframe),%a1
- movew %a1@(LOFF_SR),%d0
- andl #0x2000,%d0
- bnes superread
-
- movel #1,%d0
- movec %d0,%SFC
- movesw (%a0),d0
- bras fusexit
- superread:
- movew (%a0),d0
- fusexit:
- movem.l %sp@+,%a0-%a1
- rts
-
-
- ENTRY(copyout)
- movem.l %d0-%d1/%a0-%a1,%sp@-
- movel 20(%sp),%a0 | source
- movel 24(%sp),%a1 | destination
- movel 28(%sp),%d0 | count
- subl #1,%d0 | dec count by 1 for dbra
- movel #1,%d1
- movec %d1,%DFC | set dfc for user data space
- moreout:
- moveb (%a0)+,%d1 | fetch supervisor byte
- movesb %d1,(%a1)+ | write user byte
- dbf %d0,moreout
- movem.l %sp@+,%d0-%d1/%a0-%a1
- rts
-
- ENTRY(copyin)
- movem.l %d0-%d1/%a0-%a1,%sp@-
- movel 20(%sp),%a0 | source
- movel 24(%sp),%a1 | destination
- movel 28(%sp),%d0 | count
- subl #1,%d0 | dec count by 1 for dbra
- movel #1,%d1
- movec %d1,%SFC | set sfc for user space
- morein:
- movesb (%a0)+,%d1 | fetch user byte
- moveb %d1,(%a1)+ | write supervisor byte
- dbf %d0,morein
- movem.l %sp@+,%d0-%d1/%a0-%a1
- rts
-
-
-